package leetcode.simple.q118;

import java.util.ArrayList;
import java.util.List;

/**
 * 118. 杨辉三角
 */
public class Main {
    public static void main(String[] args) {
        List<List<Integer>> result = generate(2);
        for (List l : result) {
            System.out.println(l);
        }
    }

    /**
     * 我的题解
     * @param numRows
     * @return
     */
    public static List<List<Integer>> generate(int numRows) {
        //用于存放结果
        List<List<Integer>> result = new ArrayList<>();

        if (numRows == 0){
            return result;
        }


        //初始化第1层
        List<Integer> f1 = new ArrayList<>();
        f1.add(1);
        result.add(f1);

        if (numRows == 1){
            return result;
        }

        //初始化第2层
        List<Integer> f2 = new ArrayList<>();
        f2.add(1);
        f2.add(1);
        result.add(f2);
        if (numRows == 2){
            return result;
        }

        //从第3层开始处理
        for (int i = 2; i < numRows; i++) {
            List<Integer> list = new ArrayList<>();
            //第一个数 初始化为1
            list.add(1);

            //处理中间的数字
            //需要循环的次数为 上一层的长度-1
            for (int j = 0; j < result.get(i-1).size()-1; j++) {
                //上一层的第1个数
                Integer n1 = result.get(i-1).get(j);
                //上一层的第2个数
                Integer n2 = result.get(i-1).get(j+1);
                //求和，并且添加到列表中
                list.add(n1 + n2);
            }

            //最后一个数，初始化为1
            list.add(1);

            //处理完一层之后，添加到result中
            result.add(list);

        }
        return result;
    }
}
